05 map、reduce和monad的值操作
数据的核心操作
map 映射和函子
函子:一个带运算工具的数据类型或数据结构值。
stringMap(uppercaseLetter, "Hello World!"); // HELLO WORLD!
arrayMap(["1", "2", "3"], unary(parseInt)); // [1,2,3]
filter 过滤和筛选
[1, 2, 3, 4, 5].filter(isOdd); // [1,3,5]
reduce 和缩减器
[5, 10, 15].reduce((arr, val) => arr * val, 3); // 2250
reduce 能独立实现,也可以用 map 和 filter 的方法实现。因为 reduce 的初始值可以是一个空数组[],可以把循环的结果当成另一个数组。
**利用副作用来提高性能!**原则上这些变化都是在函数内部,需要注意的副作用一般多来自外部。
单子 monad
array 作为 functor
chain 作为 bind、flatMap
monoid
满足类型签名的函数就组成了 monoid。